/* Die Klasse Simulationsumgebung stellt eine Umgebung zur Verfuegung,
 * in der die Funktionalitaet des Teilprojekts "Personenverwaltung"
 * und "Vorgangsverwaltung getestet werden kann.
 * 
 * Datei: Simulationsumgebung.java     Autor:   Antonia Wagner 
 * Datum: 13.11.11 		                 Version: 0.2 
 * 
 * Historie: 13.11.11 v0.1 von Autor: Die Moeglichkeit, erste Daten
 * 												 einzugeben und die Klasse "Benutzer" auf
 * 												 Funktionsfaehigkeit zu ueberpruefen
 * 					 14.11.11 v0.2 von Autor: Die Moeglichkeit erstellt, eine
 * 												 Wohnsitzadresse einzugeben
 */

package personenverwaltung.simulationsumgebung;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.*;

import personenverwaltung.*;

import medienverwaltung.Exemplar;
import medienverwaltung.KeinDatumFormat;

public class Simulationsumgebung
{
  private static final int ANZAHL_BUTTONS = 6;
  private static final int ANZAHL_ZEILEN = 2;
  private static final int ANZAHL_SPALTEN = (ANZAHL_BUTTONS / 2);

  private Personenverwaltung persVerwaltung;
  private Vorgangsverwaltung vorgVerwaltung;
  private Testdaten daten;
  private JFrame frame;


  public static void main (String[] args) throws KeinDatumFormat
  {
    new Simulationsumgebung ();
  }


  public Simulationsumgebung () throws KeinDatumFormat
  {
    daten = new Testdaten ();
    persVerwaltung = new Personenverwaltung ();
    persVerwaltung.setzeBenutzerListe (daten.gibBenutzerliste ());
    vorgVerwaltung = daten.gibVorgangsverwaltung ();
    GUI_erzeugen ();
  }


  public void benutzerSimulation ()
  {
    String vorname = JOptionPane.showInputDialog (null, "Vorname: ",
        JOptionPane.OK_OPTION);
    String nachname = JOptionPane.showInputDialog (null, "Nachname: ",
        JOptionPane.OK_OPTION);

    Benutzer benutzer = new Benutzer (vorname, nachname);

    int ergebnis = JOptionPane.showConfirmDialog (null,
        "E-Mail-Adresse eingeben?");
    if (ergebnis == 0)
    {
      String email = JOptionPane.showInputDialog (null,
          "E-Mail-Adresse: ", JOptionPane.OK_OPTION);
      benutzer.emailHinzufuegen (email);
    }

    ergebnis = JOptionPane.showConfirmDialog (null,
        "Telefonnummer eingeben?");
    if (ergebnis == 0)
    {
      String nummer = JOptionPane.showInputDialog (null,
          "Telefonnummer: ", JOptionPane.OK_OPTION);
      benutzer.nummerHinzufuegen (nummer);
    }

    ergebnis = JOptionPane.showConfirmDialog (null,
        "Wohnsitzadresse eingeben?");
    if (ergebnis == 0)
    {
      String strasse = JOptionPane.showInputDialog (null, "Strasse: ",
          JOptionPane.OK_OPTION);
      String hausnr = JOptionPane.showInputDialog (null,
          "Hausnummer: ", JOptionPane.OK_OPTION);
      String postleitzahl = JOptionPane.showInputDialog (null, "PLZ: ",
          JOptionPane.OK_OPTION);
      String ort = JOptionPane.showInputDialog (null, "Ort: ",
          JOptionPane.OK_OPTION);

      benutzer.wohnsitzadresseHinzufuegen (ort, postleitzahl, strasse, hausnr);

    }

    persVerwaltung.benutzerHinzufuegen (benutzer);
    System.out.println (benutzer.toString ());
  }


  public void personenSimulation ()
  {
    String vorname = JOptionPane.showInputDialog (null, "Vorname: ",
        JOptionPane.OK_OPTION);
    String nachname = JOptionPane.showInputDialog (null, "Nachname: ",
        JOptionPane.OK_OPTION);

    Person person = new Person (vorname, nachname);
    System.out.println (person.toString ());
  }


  public void vorschlagsSimulation (String sprache)
  {
    Benutzer benutzer = persVerwaltung.gibBenutzerListe ().get (0);
    JFrame mFrame = new JFrame ("Anschaffungsvorschlag");
    GUI_Anschaffungsvorschlag gui = new GUI_Anschaffungsvorschlag 
        (vorgVerwaltung, benutzer);
    gui.setzeSprache (sprache);
    mFrame.add (gui.gibPanel ());
    mFrame.pack ();
    mFrame.setVisible (true);
  }


  public void ausleihSimulation () throws KeinDatumFormat
  {
    String nummer = JOptionPane.showInputDialog (null,
        "ID des Benutzers: ", JOptionPane.OK_OPTION);
    int id = Integer.decode (nummer);
  
    Benutzer benutzer = persVerwaltung.gibBenutzer (id);
    
    List<Exemplar> exemplare = daten.gibExemplListe ();
    int index = (exemplare.size () - 1);
    
    Exemplar exemplar = exemplare.get(index); 
       
    Ausleihe ausleihe = vorgVerwaltung.exemplarAusleihen (exemplar,
        benutzer);
  
    String datum = ausleihe.gibAusleihEnde ().toString ();
    String titel = exemplar.gibMedium ().gibTitel ();
  
    JOptionPane.showMessageDialog (null, "Das Medium '" + titel
        + "' wurde ausgeliehen bis zum " + datum + "!");
  
  }
  
  /*
   * Simulationsumgebung fuer Datums-Berechnungen
   */
  private void datumsRechner()  
  {
    /*String eingabeTag = JOptionPane.showInputDialog (null,
        "Tag: ", JOptionPane.OK_OPTION);
    int tag = Integer.decode (eingabeTag);
    
    String eingabeMonat = JOptionPane.showInputDialog (null,
        "Monat: ", JOptionPane.OK_OPTION);
    int monat = Integer.decode (eingabeMonat);
    
    String eingabeJahr = JOptionPane.showInputDialog (null,
        "Jahr: ", JOptionPane.OK_OPTION);
    int jahr = Integer.decode (eingabeJahr);
    
    Datum datum = new Datum(tag, monat, jahr);*/
    
    Datum datum = AktuellesDatum.gibAktuellesDatum ();
    
    String plusTage = JOptionPane.showInputDialog (null,
        "Anzahl Tage, die addiert werden sollen: ", 
        JOptionPane.OK_OPTION);
    int anzahlTagePlus = Integer.decode (plusTage);
    
    Datum berechnetesDatum = Datum.berechneDatum (datum, anzahlTagePlus);
    
    JOptionPane.showMessageDialog (null, berechnetesDatum.toString ());   
    
  }


  public void GUI_erzeugen ()
  {
    frame = new JFrame ("Simulation Personenverwaltung");
    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

    JPanel panel = new JPanel ();
    panel.setLayout (new GridLayout (ANZAHL_SPALTEN, ANZAHL_ZEILEN));

    /*
     * Schaltflaeche fuer die Erzeugung eines Benutzers
     */
    JButton benutzerButton = new JButton ("Benutzer erstellen");
    benutzerButton.addActionListener (new ActionListener ()
    {
      @Override
      public void actionPerformed (ActionEvent arg0)
      {
        benutzerSimulation ();
      }
    });
    panel.add (benutzerButton);

    /*
     * Schaltflaeche fuer das Erzeugen einer Person
     */
    JButton personButton = new JButton ("Person erstellen");
    personButton.addActionListener (new ActionListener ()
    {
      @Override
      public void actionPerformed (ActionEvent arg0)
      {
        personenSimulation ();
      }
    });
    panel.add (personButton);

    /*
     * Schaltflaeche, um ein Buch auszuleihen
     */
    JButton ausleihButton = new JButton ("Medium ausleihen");
    ausleihButton.addActionListener (new ActionListener ()
    {
      @Override
      public void actionPerformed (ActionEvent arg0)
      {
        try
        {
          ausleihSimulation ();
        }
        catch (KeinDatumFormat e)
        {
          e.printStackTrace ();
        }
      }
    });
    panel.add (ausleihButton);

    /*
     * Schaltflaeche, um einen Anschaffungsvorschlag zu machen
     */
    JButton vorschlagsButton = new JButton (
        "Anschaffungvorschlag machen");
    vorschlagsButton.addActionListener (new ActionListener ()
    {
      @Override
      public void actionPerformed (ActionEvent arg0)
      {
        String sprache = JOptionPane
            .showInputDialog (
                null,
                "Mit welcher "
                    + "Sprache soll die Simulation ausgefuehrt werden? \n"
                    + "(Bitte Englisch, Deutsch oder Franzoesisch eingeben)",
                JOptionPane.OK_OPTION);
        sprache = sprache.toLowerCase ();
        if ( (sprache.equals ("englisch"))
            || (sprache.equals ("deutsch"))
            || sprache.equals ("franzoesisch"))
        {
          vorschlagsSimulation (sprache);
        }
        else
        {
          JOptionPane.showMessageDialog (null,
              "Die eingegebene Sprache ist nicht erlaubt!");
        }
      }
    });
    panel.add (vorschlagsButton);

    
    /*
     * Ein Button fuer das Testen von Berechnungen mit Datums-Werten 
     */
    JButton datumsButton = new JButton("Datumssrechner");
    datumsButton.addActionListener (new ActionListener()
    {
      
      @Override
      public void actionPerformed (ActionEvent e)
      {
       datumsRechner();        
      }
    });
    panel.add(datumsButton);
    
    /*
     * Schaltflaeche, um die Simulationsumgebung zu beenden
     */
    JButton beendenButton = new JButton ("Beenden");
    beendenButton.addActionListener (new ActionListener ()
    {
      @Override
      public void actionPerformed (ActionEvent arg0)
      {
        System.exit (0);
      }
    });
    panel.add (beendenButton);

    frame.add (panel);
    frame.pack ();
    frame.setVisible (true);
  }

}
